import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// postcss-px-to-viewport运行提示已弃用,npm下面这个,postcss-px-to-viewport换成postcss-px-to-viewport-8-plugin
// npm install postcss-px-to-viewport-8-plugin -D
import pxtovw from 'postcss-px-to-viewport-8-plugin'
import { resolve } from 'path';


// https://vitejs.dev/config/
export default defineConfig({
    //插件数组
    plugins: [
        vue(),
		AutoImport({
			resolvers: [ElementPlusResolver()],
		}),
		Components({
			resolvers: [ElementPlusResolver()],
		}),
    ],
    /**
	* 在生产环境的基本公共路径。
	* @default '/'
	*/
	// base：开发或生产环境服务的公共基础路径
	// 	绝对 URL 路径名，例如 /foo/
	// 	完整的 URL，例如 https://foo.com/
	// 	空字符串或 ./（用于开发环境）
	// 	通过命令指定：vite build --base=/my/public/path/
	// 	代码中获取base：import.meta.env.BASE_URL全局变量在代码中使用，原样出现(例如import.meta.env['BASE_URL']是无效的)（vite.config.js不能用import.meta.env,要loadEnv方法，详情在env环境变量配置介绍）
	base: '/vueAdmin',
	// base: '/',
	
	// mode：将会把serve和build时的模式都覆盖掉。也可以通过命令行 --mode 选项来重写
	// 'development'（serve）
	// 'production'（build）
	
	// publicDir：作为静态资源服务的文件夹。该目录中的文件在开发期间在 / 处提供，并在构建期间复制到 outDir 的根目录，并且始终按原样提供或复制而无需进行转换。该值可以是文件系统的绝对路径，也可以是相对于项目的根目录的相对路径。
	// 默认'public'
	publicDir:'public',
	
	// assetsInclude：解析额外的定义内置type以外的静态导入资源
	// ['**/*.gltf']
	
	// envDir：用于加载 .env 文件的目录。可以是一个绝对路径，也可以是相对于项目根的路径
	// 默认：根路径
	
	css: {
		postcss:{
			plugins: [pxtovw({
				viewportWidth: 1920, // 视窗的宽度，对应的是我们设计稿的宽度.
				unitPrecision: 5, // 保留几位小数，指定`px`转换为视窗单位值的小数位数（很多时候无法整除）
				//viewportHeight: 1080, // 视窗的高度，对应的是我们设计稿的高度.(也可以不配置)
				viewportUnit: 'vw', // 指定需要转换成的视窗单位，建议使用vw
				fontViewportUnit: 'vw',//字体使用的视口单位
				//selectorBlackList: ['tab-bar', 'tab-bar-item', 'shopping-cart-bottom-bar'], // 指定不需要转换的类
				minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位.
				mediaQuery: false ,// 允许在媒体查询中转换`px`
				// 忽略某些文件夹下的文件或特定文件，例如 'node_modules' 下的文件
				// 如果值是一个正则表达式，那么匹配这个正则的文件会被忽略
				// 如果传入的值是一个数组，那么数组里的值必须为正则
				exclude: /(node_module)/
			})]
		},
		preprocessorOptions: {
			scss: {
				/**如果引入多个文件，可以使用
				* '@import "@/assets/scss/globalVariable1.scss";
				* @import"@/assets/scss/globalVariable2.scss";'
				**/
				// additionalData: '@import "@/styles/globalVar.scss";',
				additionalData: '@use "@/styles/globalVar.scss" as  *;',
			}
		}
	},
	resolve:{
		// 目录别名
		// 另一种方式
		// alias: [{
		// 	find: '@',  //字符串｜正则
		// 	replacement: path.resolve(__dirname, 'src')
		// }]
		alias: {
			'@': resolve(__dirname , 'src'),
		},
		// extensions导入时想要省略的扩展名列表。不建议忽略自定义导入类型的扩展名（例如：.vue），因为它会影响 IDE 和类型支持
		// 默认：['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']
	
		
	},
	server:{
		// host：指定服务器应该监听哪个 IP 地址， 如果将此设置为 0.0.0.0 或者 true 将监听所有地址，包括局域网和公网地址
		// 默认：'127.0.0.1'
		// 命令设置：--host 0.0.0.0 或 --host
		host: '0.0.0.0',
		
		// port：指定开发服务器端口。注意：如果端口已经被使用，Vite 会自动尝试下一个可用的端口，所以这可能不是开发服务器最终监听的实际端口
		// 默认：3000
		port: 3039,
		
		// strictPort：设为true时若端口已被占用则会直接退出，而不是尝试下一个可用端口
		// 默认：false
		
		// open：在开发服务器启动时自动在浏览器中打开应用程序。
		// '/docs/index.html'
		// 设置打开的浏览器：设置环境变量 process.env.BROWSER='firefox'
		// 是否自动在浏览器打开
		open: false,
		// 是否开启 https
		https: false,
		// 代理
		proxy: {
			// '/foo': 'http://localhost:4567',	字符串简写写法
			// '/api': { 以 ^ 开头，将会被解释为正则，如：'^/fallback/.*' 
			'/bygex/kmxWeiXin': {
				target: 'http://60.191.72.66:10088',
				changeOrigin: true, // 是否跨域
				// rewrite: path => path.replace(/^\/api/, '')
			},
			'/bygex/api': {
				target: 'http://192.168.1.167:10099',
				changeOrigin: true, // 是否跨域
				// rewrite: path => path.replace(/^\/api/, '')
			},
			'/bygex': {
				target: 'http://60.191.72.66:10088',
				changeOrigin: true, // 是否跨域
				// rewrite: path => path.replace(/^\/api/, '')
			},
			'/cemetery': {
				target: 'http://60.191.72.66:10088',
				changeOrigin: true, // 是否跨域
				// rewrite: path => path.replace(/^\/api/, '')
			},
            '/api': {
            	target: 'http://60.191.72.66:10088',
            	changeOrigin: true, // 是否跨域
            	// rewrite: path => path.replace(/^\/api/, '')
            },
			'/business': {
                // target: 'http://8.136.193.200:8888',
                target: 'http://60.191.72.66:10088',
                changeOrigin: true, //是否跨域
				// rewrite: path => path.replace(/^\/api/, '')
            },
			'/sns': {
                target: 'https://api.weixin.qq.com/',
                changeOrigin: true, //是否跨域
				// rewrite: path => path.replace(/^\/api/, '')
            },
			'/bygapi': {
				target: 'http://60.191.72.66:10088',
				changeOrigin: true, // 是否跨域
				// rewrite: path => path.replace(/^\/api/, '')
			},
			
		}
	},
	
	build:{
		// target：设置最终构建的浏览器兼容目标
		// 默认：'modules'	指支持原生 ES 模块的浏览器。
		
		// outDir：指定输出路径（相对于 项目根目录).
		// 	默认：dist
		outDir:'dist',
		// assetsDir：指定生成静态资源的存放路径（相对于 build.outDir）
		// 	默认：assets
		assetsDir: 'assets',
		
		// assetsInlineLimit：小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。
		// 默认：4096 (4kb)
		// 设置为 0 可以完全禁用此项。
		
		// sourcemap：构建后是否生成 source map 文件
		// 默认：false
		// true：创建一个独立的 source map 文件
		// 'inline'：source map 将作为一个 data URI 附加在输出文件中
		// 'hidden'：与 'true' 相似，只是 bundle 文件中相应的注释将不被保留


	},
	preview:{
		// host：为开发服务器指定 ip 地址，默认取server.host
		// 	0.0.0.0 或 true：监听所有地址，包括局域网和公共地址。
		// 	通过命令：--host 0.0.0.0 或 --host
		// port：指定开发服务器端口
		// 	默认：4173
		// strictPort：默认取server.strictPort
		// https：默认取server.https
		// open：默认取server.openy
		// proxy：默认取server.proxy
		// cors：默认取server.cors
		
	}
})
